#!/bin/bash
########################################################################
####  Script Name: sm-lib-warning
####  version: 2.0.2
####  Date: 2009-04-15

####  Copyright (C) Harald Hope 2005-2009
####  This program is free software; you can redistribute it and/or modify it under
####  the terms of the GNU General Public License as published by the Free Software
####  Foundation; either version 2 of the License, or (at your option) any later version.

####  This program is distributed in the hope that it will be useful, but WITHOUT
####  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
####  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

####  Get the full text of the GPL here:
####  http://www.gnu.org/licenses/old-licenses/gpl-2.0.html

####  Script Author: Harald Hope
####  This is a library file for smxi and cannot be run independently

####  Script URL: http://smxi.org/sm/sm-lib-warning
####  Script SVN: http://code.google.com/p/smxi
####  Script Home page: http://techpatterns.com/forums/about736.html
########################################################################

# get remote server status
# Note: du needs to exit if this file isn't found, otherwise errors can occur in du
# args: $1 - print (optional)
get_status()
{
	eval $LOGUS
	local ua="-U s-tools/warning-alerts.$WARNING_STATUS"
	if [ "$1" != 'print' ];then
		wget $ua -T$TIME_OUT -t2 -q -O $SCRIPT_HOME/$WARNING_STATUS $SCRIPT_DOWNLOAD$UPGRADE_DATA$WARNING_STATUS || error_handler 'warning-status-file-missing' $FUNCNAME $WARNING_STATUS
	fi
	if [ -f $WARNING_STATUS ];then
		STATUS=$( cat $WARNING_STATUS)
	else
		error_handler 'warning-status-file-missing' $FUNCNAME $WARNING_STATUS
	fi
	eval $LOGUE
}

# get warning text if required
# args: $1 - alert/danger; $2 - print (optional)
get_warning()
{
	eval $LOGUS
	local ua="-U s-tools/warning-alerts." uaFull=''
	if [ "$STATUS" == 'danger' -o "$STATUS" == 'danger-alert' -a "$1" == 'danger' ];then
		if [ "$2" != 'print' ];then
			uaFull="$ua$WARNING_BODY"
			wget $uaFull -T$TIME_OUT -t2 -q -O $SCRIPT_HOME/$WARNING_BODY $SCRIPT_DOWNLOAD$UPGRADE_DATA$WARNING_BODY || error_handler 'warning-data-wget-error' $FUNCNAME $WARNING_BODY
		fi
		if [ -f $WARNING_BODY ];then
			cat $WARNING_BODY
		else
			error_handler 'warning-data-file-missing' $FUNCNAME $WARNING_BODY
		fi
	fi
	if [ "$STATUS" == 'alert' -o "$STATUS" == 'danger-alert' -a "$1" == 'alert' ];then
		if [ "$2" != 'print' ];then
			uaFull="$ua$ALERT_BODY"
			wget $uaFull -T$TIME_OUT -t2 -q -O $SCRIPT_HOME/$ALERT_BODY $SCRIPT_DOWNLOAD$UPGRADE_DATA$ALERT_BODY || error_handler 'warning-data-wget-error' $FUNCNAME $ALERT_BODY
		fi
		if [ -f $ALERT_BODY ];then
			cat $ALERT_BODY
		else
			error_handler 'warning-data-file-missing' $FUNCNAME $ALERT_BODY
		fi
	fi
	eval $LOGUE
}

# this isn't properly part of the warning system, but it's still reasonably
# related. This is called in pre du-1, so users can actually remember the config files
# args: $1 - print (optional)
get_configs()
{
	eval $LOGUS
	local ua="-U s-tools/warning-alerts.$CONFIGS_BODY"
	if [ "$1" != 'print' ];then
		wget $ua -T$TIME_OUT -t2 -q -O $SCRIPT_HOME/$CONFIGS_BODY $SCRIPT_DOWNLOAD$UPGRADE_DATA$CONFIGS_BODY || error_handler 'warning-data-wget-error' $FUNCNAME $CONFIGS_BODY
	fi
	if [ -f "$CONFIGS_BODY" -a -n "$( cat $CONFIGS_BODY )" ];then
		echo "${M}Answer ${C}y${M} instead of the standard ${C}n${M} if you are asked to"
		echo "replace the following config files during $DU_UPGRADE:${N}"
		cat $CONFIGS_BODY
		echo
		echo $MLINE
	else
		error_handler 'warning-data-file-missing' $FUNCNAME $CONFIGS_BODY
	fi
	eval $LOGUE
}

# args: $1 - print (optional)
print_alert_warning_data()
{
	eval $LOGUS
	get_status $1

	if [ "$STATUS" == 'alert'  -o "$STATUS" == 'danger-alert' ];then
		echo $EBAR
		echo ${E}"*******     CURRENT ALERTS & FIXES"
		echo $EBAR
		get_warning 'alert' $1
		echo
	fi

	if [ "$STATUS" == 'danger' -o "$STATUS" == 'danger-alert' ];then
		echo $WBAR
		echo "${W}*******     IT IS NOT CURRENTLY SAFE TO $( tr [a-z] [A-Z] <<< $DU_UPGRADE )"
		echo ${W}"*******     CURRENT WARNINGS(s)"
		echo $WBAR
		get_warning 'danger' $1
		echo
		echo $LINE
		echo "${S}Please wait to do the $DU_UPGRADE until you have received word "
		echo "that it is safe, or until the script runs without displaying this warning."
		if [ "$SYSTEM_BASE" == 'sid' ];then
			echo
			echo "Check the forums and news page of sidux.com for further information."
		fi
	fi

	if [ "$STATUS" == 'proceed' ];then
		echo $MBAR
		echo "${M}There are currently no known major issues with ${C}$DU_UPGRADE${S}"
	fi
	eval $LOGUE
}

# issue warning if status = danger etc
upgrade_warning()
{
	eval $LOGMS
	local ContinueText='' options='' opt=''

	print_alert_warning_data
	if [ "$STATUS" == 'alert'  -o "$STATUS" == 'danger-alert' ];then
		ContinueText="${E}Continue with ${C}$DU_UPGRADE${E}. Proceed with caution. Watch for fixes noted above."
	fi

	if [ "$STATUS" == 'danger' -o "$STATUS" == 'danger-alert' ];then
		ContinueText="${W}Continue with ${C}$DU_UPGRADE${W}. Proceed at your own risk!!!"
	fi

	if [ "$STATUS" == 'proceed' ];then
		ContinueText="${S}Continue with ${C}$DU_UPGRADE${S}."
	fi

	echo $LINE
	echo "${C}1${S} - $ContinueText"
	echo "${C}2${S} - Continue without doing the ${C}$DU_UPGRADE${S}."
	echo "    This will let you do graphics install and various other smaller functions."
	echo
	echo "${C}3${S} - Quit the script now."
	echo $LINE
	echo $SLE
	echo $LINE

	options="continue continue-no-$DU_UPGRADE quit"
	select opt in $options
	do
		eval $LOGME
		case $opt in
			continue|c)
				# start xorg install, update, dist-upgrade, xorg component install
				install_dist_upgrade 'first'
				;;
			continue-no-$DU_UPGRADE)
				echo "${S}Skipping ${C}$DU_UPGRADE${S} for now. Continuing with script.${N}"
				;;
			quit|q)
				print_quit
				;;
			*)
				print_error opt
				upgrade_warning repeat
				;;
		esac
		break
	done
}
#upgrade_warning

###**EOF**###